import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


// 客户端 给服务器提交一条留言，从POST请求中把 body 部分获取到，并转成一个类
class Message {
    public String from;
    public String to;
    public String message;
}

// 约定前后端交互接口
@WebServlet("/message")
public class MessageServlet  extends HttpServlet {


    // 创建一个 json 对象
    private ObjectMapper objectMapper = new ObjectMapper();

    // 用 List 保存 信息
    private List<Message> messages = new ArrayList<Message>();



    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 处理消息列表

        // readValue json格式的字符串 转换为 java字符串  第一个参数对那个字符串进行 第二个参数表示把这个 json 格式的字符串转为 java 对象
        Message message = objectMapper.readValue(req.getInputStream(),Message.class);

        // 最简单的保存方法就是 保存到内存中
        messages.add(message);

        // 通过 ContentType 来告知页面，返回的数据是 json 格式
        // 有了这样的声明，此时 jquery ajax 就会自动的帮我们把字符串转成 js 对象
        // 如果没有，jquery ajax 就只是当成字符串来处理
        resp.setContentType("application/json;charset=utf8");


        resp.getWriter().write("{\"ok\": true}");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获得到消息列表  只要把消息列表中的内容 整个都返回到客户端即可
        // 此处需要使用 ObjectMapper 把 java 对象，转成 JSON 格式字符串

        String jsonString = objectMapper.writeValueAsString(messages);
        resp.setContentType("application/json;charset=utf8");
        System.out.println(" jsonString " + jsonString);

        resp.getWriter().write(jsonString);
    }
}
